twoDimensionalArrays = (x = 1, y = 1, val) => {
    const arrRes = [];

    for (let i = 0; i < y; i++) {
        const arr1 = new Array(x);
        arr1.fill(val);
        arrRes[i] = arr1;
    }

    return arrRes;
};

class IdentifierTable {
    constructor(value, IDentifier) {
        this.value = value; // 定义标识符代表的数值
        this.IDentifier = IDentifier; // 标识符
    }
}

idTableArray = x => {
    const arr = new Array();

    for (let i = 0; i < x; i++) {
        const identifierTable = new IdentifierTable('', '');

        arr.push(identifierTable);
    }

    return arr;
};

class SymbolTable {
    constructor(syn, value) {
        this.syn = syn; // 种别码
        this.value = value; // 数值或者标识符入口指针
    }
}

symbolTableArray = x => {
    const arr = new Array();

    for (let i = 0; i < x; i++) {
        const symbolTable = new SymbolTable();

        arr.push(symbolTable);
    }

    return arr;
};

/**
 * 判断是否是终结符
 * @param {*} ch 符号
 */
const IsVT = ch => {
    const chCode = ch.charCodeAt();

    //判断是否是终结符
    if (
        (chCode >= 97 && chCode <= 122) ||
        ch == '+' ||
        ch == '*' ||
        ch == '-' ||
        ch == '/' ||
        ch == '!' ||
        ch == '(' ||
        ch == ')' ||
        ch == '#' ||
        ch == '?' ||
        ch == '='
    ) {
        return true; // 为终结符
    }
    return false; // 不是终结符
};

/**
 *
 * @param {*} ch 符号
 */
const SearchTbl = ch => {
    // 返回符号所在的行列
    let index = -1;
    // 该排列即为优先关系表中元素的排列情况
    // 行和列的排列相同便于查找和引用
    // 因此即可以查行又可以查列
    const temp = ['+', '-', '*', '/', '(', ')', 'v', 'c', '=', '?', '#', '\0'];
    for (let i = 0; i < 11; i++) {
        if (ch == temp[i]) {
            index = i + 1; // 之所以是i+1，因为该顺序从一开始
            break;
        }
    }
    return index; // 返回所查找的横(纵)坐标
};

const displaySym = () => {
    let symEleStr = '<div>sym: </div>';
    for (let i = 0; i < SymbolTbl_Define.length; i++) {
        symEleStr += `<div class="cell">
            <div>${i + 1}</div>
            <div>${SymbolTbl_Define[i]}</div>
        </div>`
    }
    const symEle = document.getElementById('sym');
    symEle.innerHTML = symEleStr;
}

/**
 * 查找产生式左部的位置
 * @param {*} ch
 */
const FL_map = ch => {
    const index = INPUT.findIndex(item => item[0] === ch);
    return index;
}
